#ifndef BUDGET_H
#define BUDGET_H

#include <string>
#include <map>

// 预算类型
enum class BudgetType {
    MONTHLY,    // 月度预算
    CATEGORY    // 类别预算
};

// 单个预算项
struct BudgetItem {
    std::string yearMonth;  // 年月 (YYYY-MM) 或类别名称
    double budgetAmount;     // 预算金额
    BudgetType type;        // 预算类型

    BudgetItem(const std::string& ym, double amount, BudgetType t)
        : yearMonth(ym), budgetAmount(amount), type(t) {}
};

// 预算管理器
class Budget {
private:
    std::map<std::string, double> monthlyBudgets;    // 月度预算 key: YYYY-MM
    std::map<std::string, double> categoryBudgets;   // 类别预算 key: 类别名称
    std::string budgetFile;

public:
    Budget(const std::string& filename = "budget_config.txt");

    // 设置月度预算
    bool setMonthlyBudget(const std::string& yearMonth, double amount);

    // 设置类别预算
    bool setCategoryBudget(const std::string& category, double amount);

    // 获取月度预算
    double getMonthlyBudget(const std::string& yearMonth) const;

    // 获取类别预算
    double getCategoryBudget(const std::string& category) const;

    // 删除月度预算
    bool removeMonthlyBudget(const std::string& yearMonth);

    // 删除类别预算
    bool removeCategoryBudget(const std::string& category);

    // 显示所有预算
    void displayAllBudgets() const;

    // 检查是否超出月度预算
    bool checkMonthlyBudgetExceeded(const std::string& yearMonth, double actualExpense) const;

    // 检查是否超出类别预算
    bool checkCategoryBudgetExceeded(const std::string& category, double actualExpense) const;

    // 获取月度预算使用率
    double getMonthlyBudgetUsage(const std::string& yearMonth, double actualExpense) const;

    // 获取类别预算使用率
    double getCategoryBudgetUsage(const std::string& category, double actualExpense) const;

    // 保存预算到文件
    bool saveToFile() const;

    // 从文件加载预算
    bool loadFromFile();

    // 获取所有月度预算
    const std::map<std::string, double>& getMonthlyBudgets() const { return monthlyBudgets; }

    // 获取所有类别预算
    const std::map<std::string, double>& getCategoryBudgets() const { return categoryBudgets; }
};

#endif
